﻿using StardewModdingAPI;
using StardewModdingAPI.Events;
using StardewValley;
using StardewValley.Quests;

namespace WorseGame.Common
{
    public class 功能列表(IMonitor 监视器, IModHelper 助手)
    {
        private readonly IMonitor 监视器 = 监视器;
        private readonly IModHelper 助手 = 助手;
        private bool 已显示日志 = false;

        public void Initialize()
        {
            助手.Events.GameLoop.DayStarted += 每日开始时;
            助手.Events.GameLoop.SaveLoaded += 存档加载时;
        }

        private void 存档加载时(object? sender, SaveLoadedEventArgs e)
        {
            已显示日志 = 助手.Data.ReadSaveData<string>("WorseGame_功能列表") == "true";
        }

        private void 每日开始时(object? sender, DayStartedEventArgs e)
        {
            if (!已显示日志)
            {
                显示开局债务日志();
            }
        }

        private void 显示开局债务日志()
        {
            添加日志条目("功能列表", "（1）背包负重：背包将会有负重，每个物品的重量不一样，如果携带过多物品，移动速度就会下降。" +
                "\n（2）钓鱼限制：每个钓鱼区域有15次钓鱼机会，如果次数超过，钓鱼区域就会进入禁渔期，等待几分钟后才能继续钓鱼。" +
                "\n（3）动物饿死：农场的动物如果好几天不喂食就会死亡。" +
                "\n（4）工具耐久：工具将会有耐久，需要定期去铁匠铺花钱修复。" +
                "\n（5）开局负债：你将会在开局的时候负债一个小目标（这是你爷爷生前负的债，所以你得不到任何好处），需要每个月还钱，还不了就会受到惩罚。" +
                "\n（6）任务过期：如果一个已经发布的任务一直没有完成，那么就会失败，然后降低对应居民的好感度。" +
                "\n（7）失眠：你每天睡觉都有概率失眠，然后第二天就没有精神。" +
                "\n（8）移动体力消耗：只要移动就会持续消耗体力。" +
                "\n（9）体力限制进食：体力值为满的时候不能吃东西，体力值不为满的时候（食物回复量+当前体力>最大体力）不能进食。" +
                "\n（10）怪物增强：所有怪物都将增强（持续更新中）" +
                "\n（11）居民假期：城镇的居民每个月都会去度假（2-5天），在这期间你根本找不到他们在哪里。" +
                "\n（12）避雷针破坏：在暴风雨期间避雷针将会有概率被破坏（打雷的时候）。" +
                "\n（13）害虫破坏：每3x3范围内的作物会有概率生成苍蝇或者甲虫来捣乱。" +
                "\n");

            助手.Data.WriteSaveData("WorseGame_已显示功能列表", "true");
            已显示日志 = true;
        }
        private static void 添加日志条目(string 标题, string 内容)
        {
            if (!Game1.player.questLog.Any(q => q?.questTitle?.Contains(标题) == true))
            {
                var 日志条目 = new Quest
                {
                    questTitle = 标题,
                    currentObjective = 内容,
                };
                Game1.player.questLog.Add(日志条目);
            }
        }
    }
}
